package com.zw.rpc.client;

import com.zw.rpc.Peer;
import com.zw.rpc.transport.TransportClient;

import java.util.List;

/**
 * server选择器
 *
 * @author zw
 */
public interface TransportSelector {

    /**
     * 初始化连接
     *
     * @param peers 所有的网络端点
     * @param count 连接数
     * @param clazz client的实现类
     */
    void init(List<Peer> peers, int count, Class<? extends TransportClient> clazz);

    /**
     * 选择一个transport与server连接
     *
     * @return 网络连接
     */
    TransportClient select();

    /**
     * 释放一个连接
     *
     * @param client 连接
     */
    void release(TransportClient client);

    /**
     * 关闭连接
     */
    void close();
}
